﻿#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
//int main()
//{
//	FILE* p = fopen("my_text.txt", "r");
//	if (p == NULL)
//	{
//		perror("file open failed");
//		return 1;
//	}
//	char ch;
//	while ((ch = fgetc(p)) != EOF)
//	{
//		printf("%c ", ch);
//	}
//	//判断文件结束标志
//	if (feof(p))
//	{
//		printf("遇到文件末尾\n");
//	}
//	else if (ferror(p))
//	{
//		printf("读取错误\n");
//	}
//	else
//	{
//		printf("发生未知错误\n");
//	}
//	fclose(p);
//	p = NULL;
//	return 0;
//}
/*for (int i = 'a'; i < 'z'; i++)
	{
		fputc(i, p);
	}*/
//#include <stdio.h>
//enum { SIZE = 5 };
//int main(void)
//{
//	double a[SIZE] = { 1.,2.,3.,4.,5. };
//	FILE* fp = fopen("test.bin", "wb"); 
//
//		fwrite(a, sizeof * a, SIZE, fp); 
//
//		fclose(fp);
//	double b[SIZE];
//	fp = fopen("test.bin", "rb");
//	size_t ret_code = fread(b, sizeof * b, SIZE+2, fp); 
//
//		if (ret_code == SIZE+2) {
//			puts("数组成功读取元素如下：");
//			for (int n = 0; n < SIZE; ++n)
//				printf("%f ", b[n]);
//			putchar('\n');
//		}
//		else { // error handling
//			if (feof(fp))
//				printf("读到文件末尾了\n");
//			else if (ferror(fp)) {
//				perror("文件读取错误\n");
//			}
//		}
//	fclose(fp);
//}
//#include <stdio.h>
//#include <windows.h>
////VS2022 WIN11环境测试 
//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	fputs("abcdef", pf);//先将代码放在输出缓冲区 
//	printf("睡眠10秒已经写数据了，打开test.txt文件，发现文件没有内容\n");
//	Sleep(10000); printf("刷新缓冲区\n");
//	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（盘） 
//	//注：fflush 在⾼版本的VS上不能使⽤了
//	printf("再睡眠10秒此时，再次打开test.txt文件，文件有内容了\n");
//	Sleep(10000);
//	fclose(pf);
//	//注：fclose在关闭⽂件的时候，也会刷新缓冲区
//	pf = NULL;
//	return 0;
//}
//#include<stdio.h>
//void test01(int arr[])
//{
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//}
//int main()
//{
//	int arr[10] = { 0 };
//	for (int i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//	}
//	test01(arr);
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	int i = 0;
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("i的地址%p\n", &i);
//	printf("arr[12]的地址%p\n", &arr[12]);
//	for (i = 0; i <= 12; i++)
//	{
//		arr[i] = 0;
//		printf("hehe\n");
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	//定义喝的汽水总数为
//	int sum = 0;
//	//定义汽水
//	int num1=20;
//	//定义空瓶
//	int num2=0;
//	while (num1>0)
//	{
//		sum += num1;
//		num2 = num1+num2;
//		num1 = num2 / 2;
//		num2 = num2 % 2;
//	}
//	printf("%d ", sum);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	for (int i = 0; i < 13; i++)
//	{
//		if (i <= 6)
//		{
//			for (int j = 0; j < 6 - i;j++)
//			{
//				printf(" ");
//			}
//			for (int j = 0; j <2*i+1;j++)
//			{
//				printf("*");
//			}
//			printf("\n");
//		}
//		else
//		{
//			for (int j = 0; j <i-6; j++)
//			{
//				printf(" ");
//			}
//			for (int j = 0; j < 2 * (12 - i) + 1; j++)
//			{
//				printf("*");
//			}
//			printf("\n");
//		}
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int arr[6] = { 0 };
//	//打印所有水仙花数
//	//首先判断是几位数
//	for (int i = 0; i <= 100000; i++)
//	{
//		
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int n1 = n % 5;//给老师的
//    int n2 = n - n1;//分出去苹果
//    printf("Everyone have %d apples.\n", n2 / 5);
//    printf("%d apples have been taken in total.\n",n2);
//    printf("returned %d apples to the teacher.", n1);
//    return 0;
//}
//#incllude<stdio.h>
//int main()
//{
//    int a, b, c;
//    scanf("%d", &a);
//    scanf("%d", &b);
//    scanf("%d", &c);
//    printf("%d,%.2f", a + b + c, (a + b + c) * 1.0 / 3);
//
//    return 0;
//}
//#include<stdio.h>
//#include<math.h>
//int gcd(int a, int b) {
//    // 辗转相除法核心逻辑
//    while (b != 0) {
//        int temp = b;
//        b = a % b; // 取余数
//        a = temp;
//    }
//    return abs(a); // 返回非负的GCD
//}

// 判断两个数是否互质（除了1之外没有其他公因数）
// 若互质返回1，否则返回0
//int is_coprime(int x, int y) {
//    // 若最大公因数为1，则互质
//    return gcd(x, y) == 1 ? 1 : 0;
//}
//long int search(long int arr[], int size)
//{
//    //找出最大的公倍数
//    long int max = 0;
//    for (int i = 1; i < size; i += 2)
//    {
//        if (arr[i] > max)
//        {
//            max = arr[i];
//        }
//    }
//    for (int i = 0; i < size; i += 2)
//    {
//        if (max % arr[i] != 0)
//        {
//            max = max * arr[i];
//        }
//    }
//    return max;
//}
//int main()
//{
//    int n = 0;
//    int m = 0;//表示不是负数
//    scanf("%d", &n);
//    long int arr[200] = { 0 };
//    for (int i = 0; i < 2 * n; i += 2)
//    {
//        scanf("%d/%d", &arr[i], &arr[i + 1]);
//    }
//    long int max = search(arr, n * 2);
//    for (int i = 0; i < 2 * n; i += 2)
//    {
//        arr[i] = (max / arr[i + 1]) * arr[i];
//    }
//    int sum1 = 0;
//    int sum2 = 0;
//    for (int i = 0; i < 2 * n; i += 2)
//    {
//        sum1 += arr[i];
//    }
//    if (sum1 < 0)
//    {
//        m = 1;//表示负数 
//        sum1 = abs(sum1);
//    }
//
//    sum2 = max;
//    int n1 = sum1 / sum2;
//    int n2 = sum1 % sum2;
//    for (int i = 2; i <= n2; i++)
//    {
//        if (is_coprime(n2, sum2))
//        {
//            break;
//        }
//        if (n2 % i == 0 && sum2 % i == 0)
//        {
//            n2 /= i;
//            sum2 /= i;
//        }
//    }
//    if (n1 == 0)
//    {
//        if (m == 1)
//        {
//            printf("-%d/%d", n2, sum2);
//        }
//        else
//        {
//            printf("%d/%d", n2, sum2);
//        }
//    }
//    else
//    {
//        if (m == 1)
//        {
//            printf("%d -%d/%d", n1, n2, sum2);
//        }
//        else
//        {
//            printf("%d %d/%d", n1, n2, sum2);
//        }
//    }
//
//        return 0;
//    }
//#include<stdio.h>
//#include<math.h>
//int sushu(int a)
//{
//    for (int i = 2; i < sqrt(a); i++)
//    {
//        if (a % i == 0)
//        {
//            return 0;
//        }
//    }
//    return 1;
//}
//int main()
//{
//    int m, n;
//    int p, q, r;
//    scanf("%d %d", &m, &n);
//    for (int i = m; i <= n; i++)
//    {
//        if (sushu(i))
//        {
//            p = i;
//        }
//        for (int j = i + 1; j <= n; j++)
//        {
//            if (sushu(j))
//            {
//                q = j;
//            }
//            for (int k = j + 1; k <= n; k++)
//            {
//                if (sushu(k))
//                {
//                    r = k;
//                }
//                if (sushu(p * q + r) && sushu(q * r + p) && sushu(r * p + q))
//                {
//                    printf("%d, %d, %d\n", p, q, r);
//                }
//            }
//        }
//    }
//
//    return 0;
//}
//#include<stdio.h>
////定义一个函数找数组的重
//int arr_find(int* arr, int sz)
//{
//    int sum = 0;
//    for (int i = 0; i < sz; i++)
//    {
//        for (int j = i + 1; j < sz; j++)
//        {
//            if (arr[i] == arr[j])
//            {
//                sum++;
//            }
//        }
//    }
//    return sum;
//}
//int main()
//{
//    int n, m, k;
//    int arr[2000] = { 0 };
//    scanf("%d %d %d", &n, &m, &k);
//    int row = 0;//定义行的数量
//    int col = 0;//定义列的数量
//    //解决重复问题
//    //搞一个统计列的数组，一个统计行的数组
//    int arr_row[1000] = { 0 };
//    int arr_col[1000] = { 0 };
//    for (int i = 0; i < 2 * k; i += 2)
//    {
//        scanf("%d %d", &arr[i], &arr[i + 1]);
//    }
//    for (int i = 0; i < 2 * k; i += 2)
//    {
//        if (arr[i] == 0)
//        {
//            arr_row[row++] = arr[i + 1];
//        }
//        else
//        {
//            arr_col[col++] = arr[i + 1];
//        }
//    }
//    int row_ture = row - arr_find(arr_row, row);
//    int col_true = col - arr_find(arr_col, col);
//    long long sum = n * m - row_ture * m - col_true * n + row_ture * col_true;
//    printf("%d", sum);
//    return 0;
//}
//#include<stdio.h>
//int arr_find(int* arr, int sz)
//{
//    int sum = 0;
//    for (int i = 0; i < sz; i++)
//    {
//        for (int j = i + 1; j < sz; j++)
//        {
//            if (arr[i] == arr[j])
//            {
//                sum++;
//            }
//        }
//    }
//    return sum;
//}
//int main()
//{
//
//    int arr[3] = { 2,2,2 };
//    printf("%d", arr_find(arr, 3));
//    return 0;
//}
//#include<stdio.h>
//#include<math.h>
////求最大公因数
//int gcd(int a, int b) {
//    if (a == 0) return abs(b);
//    if (b == 0) return abs(a);
//
//    int max = abs(a);
//    int min = abs(b);
//    int remainder;
//    while (min != 0) {
//        remainder = max % min;
//        max = min;
//        min = remainder;
//    }
//
//    return max;
//}
////找一个数组的最小求最小公倍数
//int min_num(int* arr, int sz)
//{
//    int min = 1;
//    for (int i = 0; i < sz; i++)
//    {
//        min = (min / gcd(min, arr[i])) * (min);
//    }
//    return min;
//}
//int main()
//{
//    int arr_num[100] = { 0 };
//    int arr_den[100] = { 0 };
//    int n = 0;
//    char ch;
//    scanf("%d", &n);
//    for (int i = 0; i < n; i++)
//    {
//        scanf("%d/%d", &arr_num[i], &arr_den[i]);
//    }
//    //找出分母的最小倍数
//    int den_min = min_num(arr_den, n);
//    //算出分子总数
//    int num_sum = 0;
//    for (int i = 0; i < n; i++)
//    {
//        num_sum += (den_min / arr_den[i]) * arr_num[i];
//    }
//    if (num_sum < 0)
//    {
//        ch = '-';
//        num_sum = abs(num_sum);
//    }
//    else
//    {
//        ch = '';
//    }
//    int k_num = num_sum / den_min;
//    int k_den = num_sum % den_min;
//    int k = gcd(k_den, den_min);
//    k_den /= k;
//    den_min /= k;
//    if (k_num == 0)
//    {
//        if (k_den == 0)
//        {
//            printf("");
//        }
//        else {
//            printf("%c%d/%d", ch, k_den, den_min);
//        }
//    }
//    else
//    {
//        if (k_den == 0)
//        {
//            printf("%c%d", ch, k_num);
//        }
//        else
//        {
//            printf("%c%d %c%d/%d", ch, k_num, ch, k_den, den_min);
//        }
//    }
//    return 0;
//}
//
#include<stdio.h>
#include<math.h>
//求最大公因数
long long gcd(long long a, long long b) {
    if (a == 0) return abs(b);
    if (b == 0) return abs(a);

    long long max = abs(a);
    long long min = abs(b);
    long long remainder;
    while (min != 0) {
        remainder = max % min;
        max = min;
        min = remainder;
    }

    return max;
}
//找一个数组的最小求最小公倍数
long long min_num(long long* arr, int sz)
{
    long long min = 1;
    for (int i = 0; i < sz; i++)
    {
        min = (min * arr[i]) / gcd(min, arr[i]);
    }
    return min;
}
int main()
{
    long long arr_num[100] = { 0 };
    long long arr_den[100] = { 0 };
    int n = 0;
    char ch;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%lld/%lld", &arr_num[i], &arr_den[i]);
    }
    //找出分母的最小倍数
    long long den_min = min_num(arr_den, n);
    //算出分子总数
    long long num_sum = 0;
    for (int i = 0; i < n; i++)
    {
        num_sum += (den_min / arr_den[i]) * arr_num[i];
    }
    if (num_sum < 0)
    {
        ch = '-';
        num_sum = (long long)abs(num_sum);
    }
    else
    {
        ch = '\0';
    }
    long long k_num = num_sum / den_min;
    long long k_den = num_sum % den_min;
    long long k = gcd(k_den, den_min);
    k_den /= k;
    den_min /= k;
    if (k_num == 0)
    {
        if (k_den == 0)
        {
            printf(ch);
        }
        else {
            printf("%c%lld/%lld", ch, k_den, den_min);
        }
    }
    else
    {
        if (k_den == 0)
        {
            printf("%c%lld", ch, k_num);
        }
        else
        {
            printf("%c%lld %c%lld/%lld", ch, k_num, ch, k_den, den_min);
        }
    }
    return 0;
}